
/***************************************
 * ajax 相关
 * 项目公共函数是在BingoTouch js的基础上的，针对内外网交互，对http请求进行二次封装。涉及到与公安网后台的数据交互，请使用以下4个函数：
1）	xh.post_dg
2）	xh.get_dg
3）	xh.uploadFile_dg
4）	xh.downloadFile_dg
 ***************************************/
$.extend($app, {
	/**
	 * 火星中转所需要的东西
	 * APP_NAME 应用标识符
	 * APP_VERSION 应用版本号
	 * APP_DEVICE 设备信息 标识json格式字符串，包含参数:deviceVersion:系统版本号,deviceName:机器名称,
	 * SERVER_CHARSET 向服务方接口请求使用的编码 默认UTF-8
	 **/
	xhNeed: function (one,urlR) {
		if (typeof one === 'string') {//get请求需要字符串
			if (one.indexOf('?') ==-1) { // 判断地址栏 是否干干净净，没有传值
				one+='?';
			} else { //有值
				one+='&';
			}

			//亦强方所需参数
			one += "interviewee=" + $app.userLoginId;
			one += "&userAll=" + $app.userAll;
			

			// 真实请求 所需参数
			if($app.apiWhere){
				one += "&APP_DEVICE=" + JSON.stringify($app.app_device);
				one += "&APP_NAME=" + $app.APP_NAME;
				one += "&APP_VERSION=" + $app.APP_VERSION;
				one += "&SERVER_CHARSET=" + $app.SERVER_CHARSET;
				one += "&APP_URL=" + urlR;
			};
			

			
		} else {//post需要对象

			//亦强方所需参数
			one.interviewee=$app.userLoginId;
			one.userAll=$app.userAll;
			
			// 真实请求 所需参数
			if($app.apiWhere){
				one.APP_DEVICE = JSON.stringify($app.app_device);
				one.APP_NAME = $app.APP_NAME;
				one.APP_VERSION = $app.APP_VERSION;
				one.SERVER_CHARSET = $app.SERVER_CHARSET;
				one.APP_URL = urlR;
			};

			
		}
		return one;
	},



	//ajax封装
	ajax: function(obj) {
		
		$app.loadingTran(); //显示 透明屏蔽层

		var url = obj.url || ''; //请求地址
		var data = obj.data; //请求参数
		var success = obj.success; //成功回调
		var fail = obj.fail; //失败回调
		var type = obj.type || 'POST'; //请求类型POST/GET/PUT/DELETE (必须大小)

		//加入 扩展参数
		if(type=='POST'){//post请求
			data = $app.xhNeed(data,$app.ajaxUrl(url));
		}else if(type =='GET'){//get请求
			url =  $app.xhNeed(url,$app.ajaxUrl(url));
		};

		//基础ajax封装
		$app.baseAjax(url, data, success, fail, type);
	},

	

	//基础ajax封装，远程服本 vs 地服务
	baseAjax: function(url, data, success, fail, type) {
		
		
		if ($app.useNative) {//jQuery方式 ajax
            $.ajax({
                url: ($app.apiWhere?$app.door_url_dg:$app.ajaxUrl(url)),
				data: type == 'POST' ? data : null,
                timeout: $app.timeout,
				type: type,
                success: function(res) {
					//ajax成功回调 通过后台code判断状态
					$app.ajaxSuccess(res, success, fail);
				},
				error: function(xhr, typeE, error) {
					$app.ajaxError(url, data, xhr, typeE, error);
				}
            });
		} else {//品高方式 ajax

            app.ajax({
                url: ($app.apiWhere?$app.door_url_dg:$app.ajaxUrl(url)),
                data: type == 'POST' ? data : null,
                timeout: $app.timeout,
				method: type,
                contentType: "application/x-www-form-urlencoded",
                success: function(res) {
					
					if(res.code==200){
						var res=$app.anyToJSON(res.returnValue);

						if(type == 'POST'){
							console.warn(url+';  发送 = ',data,'  响应 = ',res);
						}else{
							console.warn('发送 = ',url,'  响应 = ',res);
						}

						//ajax成功回调 通过后台code判断状态
						$app.ajaxSuccess(res, success, fail);
					}else{
						
						$app.ajaxError(url,data,res, null, null);
					}
				},
				fail: function(xhr, typeE, error) {
					if(typeof url=='object'){
						var res='';
						if(url.url.indexOf('getSupervision')>-1){//重点人员
							res={
								obj:{
									person:''
								}
							};
						}else if(url.url.indexOf('getkeyperson')>-1){//临控人员
							res={
								obj:''
							};
						}
						//重点人员接口的处理
						success(res)
						$app.toast('重点人员判断报错');
						$app.initTimeout();//初始化timeout
					}else{
						$app.ajaxError(url,data,xhr, typeE, error);
					}
					
				}
            });
        }
	},

	//ajax成功回调 通过后台code判断状态
	ajaxSuccess: function(res, success, fail) {
		$app.initTimeout();
		var code = res.code; //0：返回成功，1：返回失败
		if(typeof code === 'undefined'){//不存在状态码，默认就是成功
			success instanceof Function && success(res);
		}else{
			if (code == 0) {
				success instanceof Function && success(res);
			}else {
				fail instanceof Function && fail(res);
				$app.alert(res.msg, '温馨提示', function() {
					fail instanceof Function && fail(res);
				});
			}
		}
	},
	
	//错误处理
	ajaxError:function(url,data , xhr, type, error){
		console.warn(url+'; 请求失败 xhr = ', xhr);
		console.log('type = ', type);
		console.log('error = ', error);

		$app.initTimeout();

		console.log('请求失败参数 = ',data);
		
		$app.confirm('<div class="marginB5"><i class="icon-cancel cCCC" style="font-size:75px;"></i></div>', '服务器错误', {
			noText: '留在当前',
			yesText: '退出应用',
			yesFun: function() {
				app.exit();//关闭应该
			}
		});
	},

	//初始化设置
	initTimeout: function(){
		setTimeout(function() { //延迟隐藏，体验更优秀
			$app.loading('hide');
		}, 200);
		$app.timeout = 10000;
	},

	
	//ajax地址封装
	ajaxUrl:function(url){
		var out='';
		
		if (typeof url === 'object') {//公安网络请求xxx的地址
			//例子$app.postAjax({url:http://68.174.0.43:8083/supp/person/getSupervision},{参数:1,参数:2},success)
			out=url.url;
		}else{//我们后台的地址
			out=$app.door_url() + url;
		}
		return out;
	},

	//post请求
	postAjax: function(url, data, success, fail) {
		$app.ajax({
			url: url,
			data: data,
			success: success,
			fail: fail
		});
	},
	//get请求
	getAjax: function(url, success, fail) {
		$app.ajax({
			url: url,
			type: 'GET',
			success: success,
			fail: fail
		});
	}
});
